..

Final Project - Physical Sound Synthesis and Propagation Simulation

Jackson Kruger and Xinghua Hao

The source code for this simulation can be found on Github. A zip of the compiled executables and supporting files for the simulation can be downloaded here. We wrote this simulation with C++ OpenGL, based off of my cloth simulation.

Overview

The goal of this project was to combine a physically-based sound synthesis simulation with a physically-based sound propagation simulation. The sound is derived from the velocities at various points on the different strings, which are being executed using a compute shader. The simulation then shoots out rays in all directions to determine what paths the sound would take to reach the listener's ears. The generated audio is then adjusted accordingly (delayed, made quieter) and is played through SDL.

Report

A more detailed report covering the project goals, difficulties encountered, and so forth can be found in this Google doc. The report is also embedded below.

Images and Videos

Main demo video
Note: The audio may be very quiet when played through low-quality speakers like laptop speakers... The volume of the first few notes played should be on par with the typical volume of other things played through the same speakers at the same volume. Headphones are recommended. Sounds later in the video when the listener moves away from the audio source will be quiet. Unfortunately, a popping sound in the audio is normal.


A more detailed video going through the (disappointingly small) range of sounds that can be made through real-time parameter tuning. Parameters and other info are shown in the title bar of the simulation's window.
WARNING: Some of the sounds produced may be unpleasant with headphones on at high volume


A string running in ultra slow-mo

Tools/Libraries Used

This cloth simulation is based on C++ OpenGL with a GLSL compute shader. We wrote it for Windows in Visual Studio. SDL is used to interface with Windows (displaying the window, outputting audio). The library SDL_Image is used to load textures. Glad is used as an interface to OpenGL. GLM is used for math-related things. Credit to Pink Floyd for our texture for The Walls. Credit (& thanks) to Professor Stephen J. Guy at the University of Minnesota for the code this simulation was originally based on.

Fun Mistakes

Stably Unstable


LOUD & UNPLEASANT AUDIO WARNING